package nowcode

import (
	"fmt"
	"strconv"
)

var (
	ans     []string
	segment []int
)

const SEG_COUNT = 4 //常量，最多分割4个

func RestoreIpAddresses(s string) []string {

	ans = []string{}
	segment = make([]int, 4)
	dfsId(s, 0, 0)
	return ans

}

// segId:第几个数
// segStart:计算的起始位置
func dfsId(s string, segId int, segStart int) {

	if segId == SEG_COUNT {
		fmt.Println(segment)
		if segStart == len(s) {
			add := ""
			for i, v := range segment {
				add += strconv.Itoa(v)
				if i < SEG_COUNT-1 {
					add += "."
				}
			}
			fmt.Println(add)
			ans = append(ans, add)
		}
		return
	}

	if segStart == len(s) {
		return
	}

	// 如果是0，确定第segID位为0，且只有这个情况
	if s[segStart] == '0' {

		segment[segId] = 0
		dfsId(s, segId+1, segStart+1)
		return
	}

	add := 0

	for segEnd := segStart; segEnd < len(s); segEnd++ {
		add = add*10 + int(s[segEnd]-'0')

		//确定从segStart到segEnd的数字大小，(0,255]
		if add > 0 && add <= 255 {
			segment[segId] = add
			// 开始分割segEnd后面
			dfsId(s, segId+1, segEnd+1)
		} else {
			break
		}
	}

}
